<?php

/**
 * analisis actions.
 *
 * @package    preuvideo
 * @subpackage analisis
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class analisisActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request){
  }
  public function executeVerColegios(sfWebRequest $request) {
        $term = trim(strip_tags($_GET['term']));

        $con = Doctrine_Manager::getInstance()->connection();
        $query = "SELECT nombre,provincia,region,comuna,rama_educacional,id FROM colegio WHERE nombre LIKE '%" . $term . "%' ORDER BY id LIMIT 10";

        $st=$con->execute($query);
        $result = $st->fetchAll();

        $row_set = array();
        foreach($result as $row) {

            if ($row['region'] == '1') {
                $region = 'I - Región de Tarapacá';
            }
            if ($row['region'] == '2') {
                $region = 'II - Región de Antofagasta';
            }
            if ($row['region'] == '3') {
                $region = 'III - Región de Atacama';
            }
            if ($row['region'] == '4') {
                $region = 'IV - Región de Coquimbo';
            }
            if ($row['region'] == '5') {
                $region = 'V - Región de Valparaíso';
            }
            if ($row['region'] == '6') {
                $region = 'VI - Región de O\'Higgins';
            }
            if ($row['region'] == '7') {
                $region = 'VII - Región del Maule';
            }
            if ($row['region'] == '8') {
                $region = 'VIII - Región del Bío-Bío';
            }
            if ($row['region'] == '9') {
                $region = 'IX - Región de La Araucanía';
            }
            if ($row['region'] == '10') {
                $region = 'X - Región de Los Lagos';
            }
            if ($row['region'] == '11') {
                $region = 'XI - Región de Aisén';
            }
            if ($row['region'] == '12') {
                $region = 'XII - Región de Magallanes';
            }
            if ($row['region'] == '13') {
                $region = 'Región Metropolitana de Santiago';
            }
            if ($row['region'] == '14') {
                $region = 'XIV - Región de Los Ríos';
            }
            if ($row['region'] == '15') {
                $region = 'XV - Región de Arica y Parinacota';
            }

            $row['id'] = htmlentities(stripslashes($row['id']));
            $row['value'] = $row['nombre'] . ' ('. $row['rama_educacional'] .' de '.  $row['comuna'] . ', ' . $region . ')';

            $row['id'] = (int) $row['id'];
            $row_set[] = $row;
        }


        //error_log(json_encode($row_set));
        $json = json_encode($row_set);

        if($json == '[]') {
            $json = "[{\"value\":\"1) No encuentro mi colegio y es diurno.\",\"id\":10001},
                {\"value\":\"2) No encuentro mi colegio y es vespertino.\",\"id\":10002},
                {\"value\":\"3) No encuentro mi colegio y es técnico-profesional.\",\"id\":10003}]";
        }

        echo $json;

        return $this->renderPartial('verColegios', array('json' => $json));
    }
    
    public function executeDistribucionColegio(sfWebRequest $request) {
        $colegio_id = trim(strip_tags($_GET['colegio_id']));

        $con = Doctrine_Manager::getInstance()->connection();
        $query = "
                    SELECT      ptje_nem,
                                promedio_estudiante,
                                lenguaje_y_comunicacion_actual,
                                matematica_actual
                    FROM        psu2012.alumno_resultado
                    WHERE       colegio_id = '" . $colegio_id . "'
                                AND agno_proceso = 2012
                                AND lenguaje_y_comunicacion_actual > 0
                                AND matematica_actual > 0
                                AND promedio_estudiante > 0
                    ORDER BY    ptje_nem ASC";

        //echo "<div>".$query."</div>";
        $st=$con->execute($query);
        $result = $st->fetchAll();

        $puntajes = array();
        $i=0;
        $vector_puntaje = array();
        $frecuencia = array();
        $vector_frecuencia = array();

        //echo '<div>'.count($result).'</div>';

        foreach($result as $row) {
            if($row["lenguaje_y_comunicacion_actual"] > 0 && $row["matematica_actual"] > 0 && $row["promedio_estudiante"] > 0){

                $promedio_estudiante = number_format($row["promedio_estudiante"],1);
                
                $puntajes[$i]["lenguaje"] = array($promedio_estudiante, $row["lenguaje_y_comunicacion_actual"]);
                $puntajes[$i]["matematica"] = array($promedio_estudiante, $row["matematica_actual"]);


                $puntaje_promedio = (($puntajes[$i]["lenguaje"][1] + $puntajes[$i]["matematica"][1])/2);
                $puntaje_promedio_int = (int)(($puntajes[$i]["lenguaje"][1] + $puntajes[$i]["matematica"][1])/2);
                $puntajes[$i]["promedio"] = array($promedio_estudiante , (int)($puntaje_promedio));
                
                $vector_puntaje[$i] = array( $promedio_estudiante, $puntaje_promedio);

                if( !isset($frecuencia[$puntaje_promedio_int]) ){
                    $frecuencia[$puntaje_promedio_int] = 1;
                }
                else{
                    $frecuencia[$puntaje_promedio_int] = $frecuencia[$puntaje_promedio_int] + 1;
                }

                if( !isset($frecuencia_notas[$promedio_estudiante]) ){
                    $frecuencia_notas[$promedio_estudiante] = 1;
                }
                else{
                    $frecuencia_notas[$promedio_estudiante] = $frecuencia_notas[$promedio_estudiante] + 1;
                }
                
                $i++;
            }
        }
        //print_r($vector_puntaje);
        print_r($frecuencia_notas);
        //exit;

        // Regresión lineal
        $parametros_regresion = Colegio::linearRegression($vector_puntaje);
        
        $recta_regresion = array();
        //print_r($parametros_regresion);
        
        $recta_regresion[0] = array(4, number_format(4*$parametros_regresion[0] + $parametros_regresion[1],0) );
        $recta_regresion[1] = array(7, number_format(7*$parametros_regresion[0] + $parametros_regresion[1],0) );

        
        // esperanza y varianza
        foreach($frecuencia as $puntaje => $cuantos){
            $vector_frecuencia[$puntaje] = $cuantos/$i;
        }
        //print_r($frecuencia);

        $desviacion = sqrt(Colegio::variance($vector_frecuencia));
        $esperanza = Colegio::expectedValue($vector_frecuencia);

        
        $parametros = array(
                            'puntajes' => $puntajes,
                            'recta_regresion' => $recta_regresion,
                            'esperanza' => $esperanza,
                            'desviacion' => $desviacion,
                            'alpha' => $parametros_regresion[0],
                            'beta' => $parametros_regresion[1],
                            'frecuencia_notas' => $frecuencia_notas,
                            'alumnos_considerados' => $i
                        );
        
        return $this->renderPartial('distribucionColegio', $parametros );
        
    }
    public function executeRankingCruchColegio(sfWebRequest $request) {
        $colegio_id = trim(strip_tags($_GET['colegio_id']));

        $parametros_colegio = Colegio::parametrosColegio($colegio_id);

        
        $con = Doctrine_Manager::getInstance()->connection();
        $query = "
                    SELECT      ptje_nem,
                                promedio_estudiante
                    FROM        psu2012.alumno_resultado
                    WHERE       colegio_id = '" . $colegio_id . "'
                                AND agno_proceso = 2012
                                AND lenguaje_y_comunicacion_actual > 0
                                AND matematica_actual > 0
                                AND promedio_estudiante > 0
                    ORDER BY    ptje_nem ASC";

        //echo "<div>".$query."</div>";
        $st=$con->execute($query);
        $result = $st->fetchAll();

        $i = 0;
        $maximo_estudiantes = 0;
        $notas_alumnos = array();

        $nem_alumnos = array();

        $alertas = array();
        
        foreach($result as $row) {
            if($row["ptje_nem"] > 0 && $row["promedio_estudiante"]){
                $notas_alumnos[] = $row["promedio_estudiante"];
                
                $nem_alumnos[] = array($row["promedio_estudiante"] ,$row["ptje_nem"]);
            }
            else{
                $alertas[] = "Estudiante tiene Puntaje (".$row["ptje_nem"].") y Nota (".$row["promedio_estudiante"].")";
            }
        }
        
        if(count($notas_alumnos)>0 && $parametros_colegio != null){
            $ranking_alumnos = Colegio::calcularPuntajesCruch($parametros_colegio, $notas_alumnos);
        }

        $i=0;
        $suma=0;
        foreach($ranking_alumnos as $ranking_alumno){
            $suma = $suma + $ranking_alumno[1];
            $i++;
        }
        $promedio_ranking = $suma/$i;

        $i=0;
        $suma=0;
        foreach($nem_alumnos as $nem_alumno){
            $suma = $suma + $nem_alumno[1];
            $i++;
        }
        $promedio_nem = $suma/$i;


        $parametros_template  = array(
                "parametros_colegio" => $parametros_colegio,
                "ranking_alumnos" => $ranking_alumnos,
                "promedio_ranking" => $promedio_ranking,
                "promedio_nem" => $promedio_nem,
                "alerta" => $alertas
        );

        // promedio del colegio
        // maximo del colegio


        return $this->renderPartial('rankingCruchColegio', $parametros_template );

    }
    public function executeExportarColegios(sfWebRequest $request) {
        //$colegio_id = trim(strip_tags($_GET['colegio_id']));

        $con = Doctrine_Manager::getInstance()->connection();
        $query = "  
                        SELECT      a.colegio_id,
                                    c.nombre,
                                    c.rama_educacional,
                                    c.rbd,
                                    a.numero_documento,
                                    a.ptje_nem,
                                    a.promedio_estudiante,
                                    a.lenguaje_y_comunicacion_actual,
                                    a.matematica_actual
                        FROM        psu2012.alumno_resultado a,
                                    turanking.colegio c
                        WHERE       c.id = a.colegio_id
                                    AND a.colegio_id = 1030
                        ORDER BY    ptje_nem ASC
                        #LIMIT       0,5000
                    ";

        echo "<div>".$query."</div>";
        $st=$con->execute($query);
        $result = $st->fetchAll();

        $colegios = array();
        $i=0;

        

        foreach($result as $row) {
            if($row["lenguaje_y_comunicacion_actual"] > 0 && $row["matematica_actual"] > 0 && $row["promedio_estudiante"] > 0){
                $colegios[$row["colegio_id"]]["nombre"] = $row["nombre"];
                $colegios[$row["colegio_id"]]["rbd"] = $row["rbd"];
                $colegios[$row["colegio_id"]]["rama_educacional"] = $row["rama_educacional"];

                $puntaje_promedio = (($row["lenguaje_y_comunicacion_actual"] + $row["matematica_actual"])/2);
                $puntaje_promedio_int = (int)(($row["lenguaje_y_comunicacion_actual"] + $row["matematica_actual"])/2);

                if(isset($colegios[$row["colegio_id"]]["vector_puntaje"])){
                    $cuantos_hay = count($colegios[$row["colegio_id"]]["vector_puntaje"]);
                }
                else{
                    $cuantos_hay = 0;
                }

                //echo '<div>id_alumno: '.$row["numero_documento"].' / '.$row["promedio_estudiante"].'</div>';
                $colegios[$row["colegio_id"]]["vector_puntaje"][$cuantos_hay] = array( $row["promedio_estudiante"], $puntaje_promedio );

                if( !isset($colegios[$row["colegio_id"]]["frecuencia"][$puntaje_promedio_int]) ){
                    $colegios[$row["colegio_id"]]["frecuencia"][$puntaje_promedio_int] = 1;
                }
                else{
                    $colegios[$row["colegio_id"]]["frecuencia"][$puntaje_promedio_int] = $colegios[$row["colegio_id"]]["frecuencia"][$puntaje_promedio_int] + 1;
                }
                $i++;
            }
        }
        print_r($colegios);
        //exit;
        
        $value = array();
        foreach($colegios as $colegio){


            if(count($colegio["vector_puntaje"])>1){
                // Regresión lineal
                $parametros_regresion = Colegio::linearRegression($colegio["vector_puntaje"]);
                $p0 = $parametros_regresion[0];
                $p1 = $parametros_regresion[1];
                
                // esperanza y varianza
                $vector_frecuencia = array();
                $alumnos_colegio = count($colegio["vector_puntaje"]);
                foreach($colegio["frecuencia"] as $puntaje => $cuantos){
                    $vector_frecuencia[$puntaje] = $cuantos/$alumnos_colegio;
                }
                $desviacion = sqrt(Colegio::variance($vector_frecuencia));
                $esperanza = Colegio::expectedValue($vector_frecuencia);

                print_r($vector_frecuencia);
                //exit;
            }
            else{
                $p0 = "";
                $p1 = "";
                $desviacion = "";
                $esperanza = "";
                $alumnos_colegio = "";
                
            }

            //$values[] = "('".$colegio["nombre"]."','".$colegio["rbd"]."','".$colegio["rama_educacional"]."','".$p0."','".$p1."','".$esperanza."','".$desviacion."')";

            $values[] = '("'.str_replace('"','',$colegio["nombre"]).'","'.$colegio["rbd"].'","'.$colegio["rama_educacional"].'","'.$p0.'","'.$p1.'","'.$esperanza.'","'.$desviacion.'","'.$alumnos_colegio.'")';
            //$query = "insert into psu2012.colegio_valores (colegio_nombre, rbd, rama_educacional, alpha, beta, esperanza, desviacion, alumnos_considerados) values ".$value;
            //$st=$con->execute($query);

        }
        $query2 = "insert into psu2012.colegio_valores (colegio_nombre, rbd, rama_educacional, alpha, beta, esperanza, desviacion, alumnos_considerados) values ".implode(",",$values);

        echo $query2;
        exit;
        
        //$query = "insert into psu2012.colegio_valores (colegio_nombre, rbd, rama_educacional, alpha, beta, esperanza, desviacion) values ".$values[0];
        
        $st2=$con->execute($query2);
        $result = $st2->fetchAll();
        return $this->renderPartial('exportarExcel', array() );
        
    }
    
    
}
